﻿
define(function () {
    /**
    * 在半角模式下（汉字长度为2），获取该字符串长度。
    */
    String.prototype.getLength = function () {
        var input = this.toString();
        if (!input) return 0;

        var len = 0;
        
        for (var i = 0; i < input.length; i++) {
            if (input.charCodeAt(i) > 255) len += 2;
            else len += 1;
        }
        return len;
    };

    /**
    * 在半角模式下（汉字长度为2），将该字符串截取指定长度。
    * targetLen int 半角字符长度。
    * suffix string 截取的后缀。
    */
    String.prototype.cutWith = function (targetLen, suffix) {
        var input = this.toString();
        if (!input) return '';

        var sumLen = 0;
        var i = 0;
        var isCut = false;

        for (; i < input.length; i++) {
            if (input.charCodeAt(i) > 255) sumLen += 2;
            else sumLen += 1;
            if (sumLen > targetLen) {
                isCut = true;
                break;
            }
        }
        return isCut ? (input.substr(0, i) + suffix || '') : this.toString();
    }

    /**
    * 同String.Format(format, obj1, obj2...)。
    */
    String.prototype.format = function () {
        var args = arguments;

        return this.replace(/{(\d+)}/g, function (g1, g2) {
            var index = parseInt(g2);
            if (index < args.length) return args[index].toString();
            else return g1;
        });
    }

    /**
    * 同String.Trim(input)。
    */
    String.prototype.trim = function () {
        return this.replace(/^\s*|\s*$/g, '');
    }
})